using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using JGSY.CMS.LowCode.Platform.Infrastructure.Configuration.ServiceModules;

namespace JGSY.CMS.LowCode.Platform.Infrastructure.Configuration.MiddlewareModules
{
    /// <summary>
    /// 中间件模块接口
    /// 定义模块化中间件配置的统一规范，支持基于权限的动态启用/禁用
    /// </summary>
    public interface IMiddlewareModule
    {
        /// <summary>
        /// 模块名称
        /// </summary>
        string ModuleName { get; }

        /// <summary>
        /// 中间件执行优先级（数字越小优先级越高）
        /// </summary>
        int Priority { get; }

        /// <summary>
        /// 是否在开发环境中启用
        /// </summary>
        bool EnableInDevelopment { get; }

        /// <summary>
        /// 是否在生产环境中启用
        /// </summary>
        bool EnableInProduction { get; }

        /// <summary>
        /// 是否在快速启动模式下启用
        /// </summary>
        bool EnableInFastMode { get; }

        /// <summary>
        /// 中间件对应的权限枚举
        /// </summary>
        ModulePermission RequiredPermission { get; }

        /// <summary>
        /// 是否为关键中间件（关键中间件即使权限禁用也会加载基本功能）
        /// </summary>
        bool IsCriticalModule { get; }

        /// <summary>
        /// 配置中间件（完整功能）
        /// </summary>
        /// <param name="app">应用程序构建器</param>
        /// <param name="configuration">配置对象</param>
        void ConfigureMiddleware(WebApplication app, IConfiguration configuration);

        /// <summary>
        /// 配置中间件的精简版本（当权限被禁用时使用）
        /// </summary>
        /// <param name="app">应用程序构建器</param>
        /// <param name="configuration">配置对象</param>
        void ConfigureMinimalMiddleware(WebApplication app, IConfiguration configuration);

        /// <summary>
        /// 验证中间件配置和依赖
        /// </summary>
        /// <param name="configuration">配置对象</param>
        /// <returns>验证结果</returns>
        bool ValidateConfiguration(IConfiguration configuration);
    }
}
